<?php

Loader::using("models::entities::CompetenciasPracticantes");

/**
 * Description of EvaluarCompetenciasPracticante
 *
 * @author boscaru
 * @export Modules
 * export-metadata RequiredRoles:ROLE_ENTERPRISE
 */
class EvaluarCompetenciasPracticante extends Module {

    private $Results = array();
    private $IdPracticante;

    public function index() {
        $Solicitudes = $this->model->applications->GetByEstado(EstadoSolicitud::Procesada);

        $this->assign("solicitudes", $Solicitudes);
        $this->assign("evaluarInicial", $this->route->action("realizarEvaluacionInicial", array("IdPracticante" => "",)));
        $this->assign("evaluarFinal", $this->route->action("realizarEvaluacionFinal", array("IdPracticante" => "",)));

        $this->display("index");
    }

    public function realizarEvaluacionInicial() {
        $idPracticante = $this->request->get("IdPracticante");
        $practicante = $this->model->practitioners->GetById($idPracticante);
        $this->assign("practicante", $practicante);
        
        if($practicante !=null ){
                
            $evaluacion =   $this->model->capacitiespractitioners->GetByPracticante($idPracticante);
            $competencias = $this->model->skills->GetInicial();
            $seguir = TRUE;
    
            foreach ($evaluacion as $eval) {
                if($competencias[0]->getIdCompetencia()==$eval->getIdCompetencia()){
                    $seguir=FALSE;
                }
            }
            
            if($seguir){
                    $competenciasList = array();
                    foreach (TipoCompetencia::values() as $tipo) {
                        $competenciasList[$tipo] = array();
                    }

                    foreach ($competencias as $competencia) {
                        $competenciasList[$competencia->getTipoCompetencia()][] = $competencia;
                    }

                    $this->assign("competencias", $competenciasList);

                    $this->addMessage(new Message(
                                    "Este formulario debe diligenciarse una vez el estudiante en pr&aacute;cticas empresariales tenga m&iacute;nimo 3 semanas de haberse incorporado en la empresa. El objetivo de su dise&ntilde;o consiste en hacerle un seguimiento a la labor desempe&ntilde;ada por nuestros estudiantes y tomar las medidas anticipadas o correctivas con el fin de mejorar continuamente.",
                                    "Se&ntilde;or empresario:",
                                    Message::INFO));

                    $this->assign("cancel", $this->route->action("index"));
                    $this->assign("action", $this->route->action("guardarEvaluacionInicial"));

                    $this->display();
                
            }else{
                   $this->addMessage(new Message(
                   "La evaluaci&oacute;n inicial ya fue realizada",
                   "Se&ntilde;or empresario:",
                   Message::INFO));
                   $this->index();
             }
           
           
       
        } else {
           $this->addMessage(new Message(
           "No existen estudiantes asignados a la pr&aacute;ctica",
           "Se&ntilde;or empresario:",
           Message::INFO));

           $this->index();
        }
       
    }

    public function realizarEvaluacionFinal() {
        $idPracticante = $this->request->get("IdPracticante");
        $practicante = $this->model->practitioners->GetById($idPracticante);
        $this->assign("practicante", $practicante);
         
        if($practicante !=null ){
            
            $evaluacion =   $this->model->capacitiespractitioners->GetByPracticante($idPracticante);
            $competencias = $this->model->skills->GetFinal();
            $seguir = TRUE;
    
            foreach ($evaluacion as $eval) {
                if($competencias[0]->getIdCompetencia()==$eval->getIdCompetencia()){
                    $seguir=FALSE;
                }
            }
            
            if($seguir){     
            
                    $competenciasList = array();
                    foreach (TipoCompetencia::values() as $tipo) {
                        $competenciasList[$tipo] = array();
                    }

                    foreach ($competencias as $competencia) {
                        $competenciasList[$competencia->getTipoCompetencia()][] = $competencia;
                    }

                    $this->assign("competencias", $competenciasList);
                    $this->addMessage(new Message(
                                    "Este formulario refleja la evaluaci&oacute;n final y definitiva del estudiante en pr&aacute;cticas profesionales.  Se diligencia y env&iacute;a con una semana de anterioridad a las fechas estipuladas en el calendario acad&eacute;mico para los ex&aacute;menes finales del semestre. La evaluaci&oacute;n obtenida de la pr&aacute;ctica empresarial representa la valoraci&oacute;n para aprobaci&oacute;n de dicha asignatura.",
                                    "Se&ntilde;or empresario:",
                                    Message::INFO));

                    $this->assign("cancel", $this->route->action("index"));
                    $this->assign("action", $this->route->action("guardarEvaluacionFinal"));

                    $this->display();
            }else{
                 $this->addMessage(new Message(
                 "La evaluaci&oacute;n final ya fue realizada",
                 "Se&ntilde;or empresario:",
                 Message::INFO));
                 $this->index();    
            }
            
        } else {
             $this->addMessage(new Message(
             "No existen estudiantes asignados a la pr&aacute;ctica",
             "Se&ntilde;or empresario:",
             Message::INFO));
             $this->index();
        } 
            
    }

    public function guardarEvaluacionInicial() {
        $this->Results  = $this->request->post("ValorEncuesta");
        $this->IdPracticante = $this->request->post("IdPracticante");
        $this->guardarEvaluacion();
        $this->addMessage(new Message("El estudiante ha sido evaluado correctamente.", "Listo:", Message::SUCCESS));
        $this->index();
    }

    public function guardarEvaluacionFinal() {
        $this->Results = $this->request->post("ValorEncuesta");
        $this->IdPracticante = $this->request->post("IdPracticante");
     
        $this->guardarEvaluacion();
        $this->addMessage(new Message("El estudiante ha sido evaluado correctamente.", "Listo:", Message::SUCCESS));
        $this->index();
    }

    /**
     * @export-metadata Bind:this
     */
    private function guardarEvaluacion() {
          foreach($this->Results as $idCompetencia => $valor){
            
            $evaluacion = new CompetenciasPracticantes();
            $evaluacion->setEvaluacion($valor);
            $evaluacion->setIdPracticante($this->IdPracticante);
            $evaluacion->setIdCompetencia($idCompetencia);
            
            $this->model->capacitiespractitioners->Insert($evaluacion);
        }
          
    }

    public function getResults() {
        return $this->Results;
    }

    public function setResults($results) {
        $this->Results = $results;
    }

    public function getIdPracticante() {
        return $this->IdPracticante;
    }

    public function setIdPracticante($IdPracticante) {
        $this->IdPracticante = $IdPracticante;
    }
}

?>
